﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
using System.Data;
using produccion.clases;

namespace produccion.forms
{
    /// <summary>
    /// Lógica de interacción para frmPrcPrd.xaml
    /// </summary>
    public partial class frmPrcPrd : Window
    {
        CLSPRCPRD PrcPrd = new CLSPRCPRD();
        DataTable dt = new DataTable();
        public frmPrcPrd()
        {
            InitializeComponent();
        }

        private void LimpiarCampos()
        {
            txtCodigo.Text = "";
            txtNombre.Text = "";
            txtValor.Text="";
        }

        private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            Consultarprocesos();
        }

        private void Consultarprocesos()
        {
            try
            {
                dgPrc.ItemsSource = null;
                dt.Rows.Clear();
                dt = PrcPrd.ConsultarTodas();
                dgPrc.ItemsSource = dt.DefaultView;
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Error al consultar procesos", MessageBoxButton.OK, MessageBoxImage.Error);              
            }
        }
       
        private void btnBuscar_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                string CodPrc;
                FRMbuscar frm = new FRMbuscar(PrcPrd, "Buscar", "Codigo", "NOMPRC_PPR", "Codigo");
                frm.ShowDialog();
                CodPrc = frm.retorno;
                txtCodigo.Text = CodPrc;
                if (!txtCodigo.Text.Equals(""))
                {
                    PrcPrd.CODPRC_PPR=txtCodigo.Text;
                    PrcPrd.Consultar();
                    txtNombre.Text = PrcPrd.NOMPRC_PPR;
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Error al buscar procesos", MessageBoxButton.OK, MessageBoxImage.Error);
            }

        }

        private void border1_Loaded(object sender, RoutedEventArgs e)
        {

        }

        private void Window_Loaded_1(object sender, RoutedEventArgs e)
        {
            Consultarprocesos();
        }

        private void btnNuevo_Click_1(object sender, RoutedEventArgs e)
        {
            LimpiarCampos();
            PrcPrd.LimpiarValores();
        }

        private void btnGrabar_Click_1(object sender, RoutedEventArgs e)
        {
            try
            {
                PrcPrd.CODPRC_PPR = txtCodigo.Text;
                PrcPrd.NOMPRC_PPR = txtNombre.Text;
                PrcPrd.VALOR_PPR = System.Convert.ToDouble(txtValor.Text);
                if (PrcPrd.ExisteProceso())
                {
                    PrcPrd.Actualizar();
                }
                else
                {
                    PrcPrd.Insertar();
                }
                PrcPrd.LimpiarValores();
                LimpiarCampos();
                Consultarprocesos();
                new MDOgeneral.notificar(wPnot, "Los cambios fueron guardados correctamente.", true);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Error al grabar procesos", MessageBoxButton.OK, MessageBoxImage.Error);
                new MDOgeneral.notificar(wPnot, "Los cambios no pueden ser guardados correctamente.", false);
            }
        }

        private void btnEliminar_Click_1(object sender, RoutedEventArgs e)
        {
            try
            {
                if (MessageBox.Show("Realmente desea eliminar el parámetro de control?", "Parámetros de control", MessageBoxButton.YesNo, MessageBoxImage.Question) == MessageBoxResult.Yes)
                {
                    PrcPrd.CODPRC_PPR = txtCodigo.Text;
                    PrcPrd.Eliminar();
                    LimpiarCampos();
                    PrcPrd.LimpiarValores();
                    Consultarprocesos();
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Error al eliminar procesos", MessageBoxButton.OK, MessageBoxImage.Error);
            }
        }

        private void btnSalir_Click_1(object sender, RoutedEventArgs e)
        {
            this.Close();
        }

        private void dgPrc_MouseDoubleClick_1(object sender, MouseButtonEventArgs e)
        {
            try
            {
                if (dgPrc.SelectedIndex > -1)
                {
                    txtCodigo.Text = ((DataRowView)dgPrc.Items[dgPrc.SelectedIndex]).Row["Codigo"].ToString();
                    txtNombre.Text = ((DataRowView)dgPrc.Items[dgPrc.SelectedIndex]).Row["Nombre"].ToString();
                    txtValor.Text = ((DataRowView)dgPrc.Items[dgPrc.SelectedIndex]).Row["Valor"].ToString();
                    expPrc.IsExpanded = true;
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Error al cargar procesos con doble click del mouse", MessageBoxButton.OK, MessageBoxImage.Error);
            }
        }

        private void dgPrc_PreviewKeyDown(object sender, KeyEventArgs e)
        {
            var elemento = e.OriginalSource as UIElement;
            if (e.Key == Key.Enter && elemento != null)
            {
                e.Handled = true;
                elemento.MoveFocus(new TraversalRequest(FocusNavigationDirection.Next));
            }
        }

        private void border1_KeyDown(object sender, KeyEventArgs e)
        {
            var elemento = e.OriginalSource as UIElement;
            if (e.Key == Key.F3 && elemento != null)
            {
                if (MDOgeneral.logBusquedadAbierta == true) { MDOgeneral.logBusquedadAbierta = false; }
            }

            if (e.Key == Key.F4 && elemento != null)
            {
                if (MDOgeneral.logBusquedadAbierta1 == true) { MDOgeneral.logBusquedadAbierta1 = false; }
            }

            if (e.Key == Key.F5 && elemento != null)
            {
                if (MDOgeneral.logBusquedadAbierta2 == true) { MDOgeneral.logBusquedadAbierta2 = false; }
            }
        }

    }
}

namespace ValidarPrcPrd
{
    internal class ValidarCod : ValidationRule
    {
        public override ValidationResult Validate(object value, System.Globalization.CultureInfo cultureInfo)
        {
            if (value.ToString() == null)
            {
                return new ValidationResult(false, "El código no puede estar nulo");
            }
            if (value.ToString().Trim().Equals(""))
            {
                return new ValidationResult(false, "El código no puede estar vacío");
            }
            return new ValidationResult(true, null);
        }
    }

    internal class ValidarNom : ValidationRule
    {
        public override ValidationResult Validate(object value, System.Globalization.CultureInfo cultureInfo)
        {
            if (value.ToString() == null)
            {
                return new ValidationResult(false, "El nombre no puede estar nulo");
            }
            if (value.ToString().Trim().Equals(""))
            {
                return new ValidationResult(false, "El nombre no puede estar vacío");
            }
            return new ValidationResult(true, null);
        }
    }

    internal class ValidarVal : ValidationRule
    {
        public override ValidationResult Validate(object value, System.Globalization.CultureInfo cultureInfo)
        {
            if (value.ToString() == null)
            {
                return new ValidationResult(false, "El valor no puede estar nulo");
            }
            if (value.ToString().Trim().Equals(""))
            {
                return new ValidationResult(false, "El valor no puede estar vacío");
            }
            if (!IsNumeric(value))
            {
                return new ValidationResult(false, "El valor debe ser numérico");
            }
            return new ValidationResult(true, null);
        }

        public bool IsNumeric(object Expression)
        {
            bool isNum;
            double retNum;

            isNum = Double.TryParse(Convert.ToString(Expression), System.Globalization.NumberStyles.Any, System.Globalization.NumberFormatInfo.InvariantInfo, out retNum);
            return isNum;
        }
    }


}